package fileBusiness

import model.XdCell
import sysUtil.ExcelUtil
import sysUtil.ResultCode
import sysUtil.ResultJson
import sysUtil.SysCommUtil
import xdTool.XdTableCfg
import xdTool.XdWidgetPanel

/*
上传专用
 */
class SpecialUpLoadController {


    def sysDBUtilService
    def index() {}

    /**
     * 上传Excel2007到数据表
     * 上传xdWidgetPanel数据
     * @return
     */
    def doUpdLoadXdPanelDataByXLSX(){
        //1.上传文件到临时文件
        def result = ResultJson.resultJson()
        try {
            def file = params?.file
            File tempFile
            if(file){
                tempFile = SysCommUtil.createTempFile(".xlsx")
                file.transferTo(tempFile)
            }
            result.put(ResultJson.CODE.name,ResultCode.TABLE_DATA_SUCCESS.code)
            result.put(ResultJson.MSG.name,ResultCode.OPT_SUCCESS.message)
            result.put(ResultJson.DATA.name,tempFile.getName())
        }catch (Exception e){
            result.put(ResultJson.MSG.name,"${e.getStackTrace()}".substring(0,200))
            result.put(ResultJson.CODE.name,ResultCode.OPT_ERROR.code)
            e.printStackTrace()
        }finally{
            render result
        }
    }

    /**
     * 导入excel2007的数据到表
     * @return
     */
    def importXlsx2TableByPanelId(){
        //2.读取文件写入数据到表
        //....2.1读取excel每个sheet，并根据panel-id获取表头行数，以及字段映射
        //....2.2根据传入的panel-id获取表结构
        //....2.2.1判断是主键干预
        //.........a.如果是，则根据配置的主键删除后再插入
        //.........b.如果不是，则无需删除，直接插入
        //....2.3写入批量写入数据，每次读取5000条记录(循环执行2.2步骤)
        //3.删除临时文件
        //4.异常处理
        def result = ResultJson.resultJson()
        try {
            //入参： tempFile 文件名称 ,panelId
            def tempFile  = SysCommUtil.getTempFile(params?.tempFile)
            def panelId = Long.parseLong(params?.panelId)
            XdWidgetPanel xdWidgetPanel = XdWidgetPanel.get( panelId)
            def db = sysDBUtilService.getGroovySqlInstanceById(xdWidgetPanel.dataSourceId)

            XdTableCfg xdTableCfg = XdTableCfg.get(xdWidgetPanel.dataId)
            def insertSql = sysDBUtilService.createPanelInsertSQL(params)
            def deleteSql = sysDBUtilService.createPanelDeleteSQL(params)

            List<XdCell[]> impHeader = xdTableCfg.getColsField()  //xdTableCfg.getLayUiColsModel(params)

            //List layuiHeader,  deleteSql,insertSql,groovy.sql.Sql db,tempFile
            ExcelUtil.ReadAndInsertByTableAndFile(impHeader,deleteSql,insertSql,db,tempFile)
            result.put(ResultJson.CODE.name,ResultCode.OPT_SUCCESS.code)
            result.put(ResultJson.MSG.name,ResultCode.OPT_SUCCESS.message)
        }catch (Exception e){
            result.put(ResultJson.MSG.name,"${e.getStackTrace()}".substring(0,200))
            result.put(ResultJson.CODE.name,ResultCode.OPT_ERROR.code)
            e.printStackTrace()
        }finally{
            render result
        }
    }
}
